package com.medical.model.param;

import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.*;

import java.util.Map;

/**
 * @author TISNIW
 * @version 1.0
 * @date 2025/6/14 15:57
 * @desc
 */
/**
 * MReply 表示从大模型（如 OLLAMA）返回的流式响应对象。
 * 该类用于接收 `/api/chat` 接口返回的每一块数据（chunk）。
 */
@Getter
@Setter
@Builder
@NoArgsConstructor
@AllArgsConstructor
@JsonInclude(JsonInclude.Include.NON_NULL)// 序列化时忽略值为 null 的字段
public class MReply {

    /**
     * 使用的模型名称，例如：llama3、qwen、mistral 等
     */
    private String model;

    /**
     * 当前 chunk 的创建时间戳（ISO 8601 格式）
     */
    @JsonProperty("created_at")
    private String createdAt;

    /**
     * 模型返回的消息内容，包含角色（role）和实际文本（content）
     */
    private Map<String , Object> message;

    /**
     * 是否已完成整个回复：
     * - "true" 表示这是最后一个 chunk
     * - "false" 表示还有后续内容
     */
    private String done;

    /**
     * 完成原因，表示模型为什么停止生成内容，例如：
     * - "stop" 表示自然结束
     * - "length" 表示达到最大长度限制
     */
    @JsonProperty("done_reason")
    private String doneReason;

    /**
     * 整个请求的总耗时（单位：纳秒或毫秒，取决于后端实现）
     */
    @JsonProperty("total_duration")
    private String totalDuration;

    /**
     * 模型加载所花费的时间（单位：纳秒或毫秒）
     */
    @JsonProperty("load_duration")
    private String loadDuration;

    /**
     * 提示词（prompt）评估的 token 数量
     */
    @JsonProperty("prompt_eval_count")
    private String promptEvalCount;

    /**
     * 提示词（prompt）评估所花费的时间（单位：纳秒或毫秒）
     */
    @JsonProperty("prompt_eval_duration")
    private String promptEvalDuration;

    /**
     * 实际生成内容所处理的 token 数量
     */
    @JsonProperty("eval_count")
    private String evalCount;
}
